package com.database;

import java.sql.Connection;
import java.sql.DriverManager;

import sun.reflect.Reflection;

import com.database.config.DBConfig;

/**
 * <p>Title:DbTest类 </p>
 * <p>Description: 通过2种方式连接数据库的测试类，一种是直接通过jdbc的方式
 * 另一种是通过数据源的方式连接数据库</p>
 * <p>Copyright: Copyright (c) 2008  WISTONE WIRELESS ENTERTAINMENT INC</p>
 * <p>Company:WISTONE WIRELESS ENTERTAINMENT INC </p>
 * @author kevin
 * @Date 2009-6-10
 * @version 1.0
 */
public class DBConnection {
    public DBConnection() {

    }
    /**
   * 从数据连接池中获取数据库的连接。通过数据库的定位器DSLocator，获取数据库的连接。
   *
   * 输入参数：
   *   dsname:String  数据源名称
   * 返回：Connection  数据库的连接。
   */
  public static  Connection getDSConnection(String area) {
      Connection con = null;
      String dsname_area=null;
      if((area!=null)&&(!area.equals(""))){
          dsname_area = "java:comp/env/jdbc/mysql/game" + area.trim();

          try {
              con = DSLocator.singleton().getInstance(dsname_area);
          } catch (Exception e) {
              e.printStackTrace();
          }
      }else{
    	  con = getConnections();
      }
      return con;
  }
    /**
     * 从数据连接池中获取数据库的连接。通过数据库的定位器DSLocator，获取数据库的连接。
     *
     * 输入参数：
     *   dsname:String  数据源名称
     * 返回：Connection  数据库的连接。
     */
    public static  Connection getDSConnection() {
        Connection con = null;
        String dsname = "java:comp/env/jdbc/mysql/game";
        try {
            con = DSLocator.singleton().getInstance(dsname);
//          String name1=Reflection.getCallerClass(1).getSimpleName();
//			String name2=Reflection.getCallerClass(2).getSimpleName();
//			String name3=Reflection.getCallerClass(3).getSimpleName();
//			String name4=Reflection.getCallerClass(4).getSimpleName();
//			String name5=Reflection.getCallerClass(5).getSimpleName();
//			System.err.println("----:"+name1+"-->"+name2+"-->"+name3+"-->"+name4+"-->"+name5);
        } catch (Exception e) {
            e.printStackTrace();
            if(con==null){
            	System.err.println("jndi connection fail!");
            	return getConnections();
            }
        }
        return con;
    }

    public static Connection getConnections() {
        Connection con = null;
        String sqlurl = DBConfig.getInstance().getURL();
        String driver = DBConfig.getInstance().getDriverClass();
        String user = DBConfig.getInstance().getUser();
        String pwd = DBConfig.getInstance().getPassword();
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(sqlurl, user, pwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return con;
    }

}
